package com.kum.config;

import com.kum.filter.CorsInterceptor;
import com.kum.filter.TokenInterceptor;
import com.kum.handler.TokenDataExplainHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * @version V1.0
 * @Package com.kum.config
 * @auhter 枯木Kum
 * @date 2021/5/1-1:09 PM
 * <p>...</p>
 */

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        /**
         * addMapping 适用于所有的接口
         * allowedOrigins 适用于所有的地址
         * allowedHeaders 允许自定义请求头
         * allowedMethods 适用于所有请求方式
         * allowCredentials 允许携带验证
         * maxAge 允许时间
         *
         */
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedHeaders(CorsConfiguration.ALL)
                .allowedMethods(CorsConfiguration.ALL)
                .allowCredentials(true)
                .maxAge(3600);

    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(tokenDataExplainHandler());
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(corsInterceptor())
//                .addPathPatterns("/**");
        registry.addInterceptor(tokenInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login");

    }

    @Bean
    public TokenDataExplainHandler tokenDataExplainHandler() {
        return new TokenDataExplainHandler();
    }


    @Bean
    public TokenInterceptor tokenInterceptor() {
        return new TokenInterceptor();
    }

    @Bean
    public CorsInterceptor corsInterceptor() {
        return new CorsInterceptor();
    }

}
